package com.LambdaDemo;
//lambda表达式 规范

/*
    lambda表达式应用
    注意:
     需要接口中只有唯一一个抽象方法时
     多行代码用代码块包裹{}
     接口为函数时接口
     多个参数可以去掉类型，保持一致 去or不去
*/
public class TestLambda2 {
    public static void main(String[] args) {
        //声明接口对象
        Soo soo = null;

        //无参时
//        soo = ()->{
//            System.out.println("lambada-1");
//        };

        //只有一个参数时可去掉括号
//        soo = a->{
//            System.out.println("lambada-2"+a);
//        };

        //只有一行代码时可去掉花括号  多行必须加花括号 ->代码块
//        soo = a->
//            System.out.println("lambada-3"+a);

//        soo = (int a)->{
//            System.out.println("lambada-4"+a);
//            System.out.println("lambada-4"+a);
//            System.out.println("lambada-4"+a);
//        };

        soo = (a)->{
            Aoo as = new Ts();
            as.Test(a);
            return a;
        };

        int a = soo.Age(20);
        System.out.println("return->"+a);

        //用线程 代理模式  继承Thread类的Runnable
        new Thread(()->{
            Aoo as = new Ts();
            as.Test(500);
        }).start();
    }
}
interface Soo{
    int Age(int a); //参数不限制 方法只能有一个
}
interface Aoo{
    void Test(int n);
}
class Ts implements Aoo{
    @Override
    public void Test(int n) {
        System.out.println("test...在lambda中调用方法->"+n);
    }
}